package com.eunion.web.admin.repository;

import java.util.List;

import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import com.eunion.core.common.KvVo;
import com.eunion.web.admin.entity.AdminRole;
import com.eunion.web.common.base.BaseRepository;

/**
 * @see AdminRole .
 * 
 */
public interface AdminRoleRepository extends BaseRepository<AdminRole, String> {

	/**
	 * 查询该角色代码或角色名字是否有已经使用.
	 * @param roleCode 角色代码
	 * @param roleName 角色名字
	 * @return 符合条件的查询列表.
	 */
	List<AdminRole> findByRoleCodeOrRoleName(String roleCode, String roleName);

	/**
	 * 查询现在的权限列表.
	 * @return 返回权限列表.
	 */
	@Query(value = "SELECT new com.eunion.core.common.KvVo(roleCode,roleName) FROM AdminRole u where u.status=1 order by u.roleName asc ")
	List<KvVo> findAllRoles();

	/**
	 * 根据用户名查询其拥有的角色 
	 * @param username 用户名
	 * @return 角色列表
	 */
	@Query(value = "select distinct u.role_code from admin_user_role u,admin_role r where r.status = 1 and u.username =?1", nativeQuery = true)
	List<String> fingAllRolesByUsername(String username);

	/**
	 * 查询角色下的权限列表.
	 * @param roleCode 角色代码
	 * @return 权限代码列表
	 */
	@Query(value = "select auth_code from admin_role_auth where role_code = ?1", nativeQuery = true)
	List<String> fingAllAuthsByRole(String roleCode);

	/**
	 * 根据roleCode删除角色下面的权限.
	 * @param roleCode 角色代码
	 * @return　返回删除的个数？
	 */
	@Modifying
	@Query(value = "delete from admin_role_auth where role_code = ?1 ", nativeQuery = true)
	int removeRoleAuths(String roleCode);

}
